package optymalizacjaSkladowania;

import java.util.List;
import skladowisko.Kontener;
import skladowisko.Terminal;
import skladowisko.transport.TransportPrzychodzacy;

/**
 *
 * @author Krzysiek
 */
public abstract class ProstyAnalitykSkladowania extends AnalitykSkladowania
{
    //metoda przydzielMiejsceKontenerowi pozwala za zmieniac jedynie algorytm przydzialu
    //miejsca skladowania dla pojedynczego kontenera
    protected abstract boolean przydzielMiejsceKontenerowi(Kontener k, PropozycjaPrzydzialow propozycja);

    public ProstyAnalitykSkladowania(Terminal terminal)
    {
        super(terminal);
    }

    public ProstyAnalitykSkladowania()
    {
        
    }

    @Override
    public PropozycjaPrzydzialow przydzielajMiejsca(TransportPrzychodzacy transport)
    {
        PropozycjaPrzydzialow propozycja = new PropozycjaPrzydzialow(transport);

        List<Kontener> kontenery = transport.getKontenery();

        for(Kontener k : kontenery)
        {
            boolean przydzielono = przydzielMiejsceKontenerowi(k, propozycja);
            if(!przydzielono)
            {
                throw new IllegalArgumentException("Nie udało się przydzielic miejsca kontenerowi: " + k.toString());
            }
        }

        return propozycja;
    }
 

    @Override
    public void clear()
    {
        super.clear();
    }
}
